home *** CD-ROM | disk | FTP | other *** search
- //
- // Linear-Affine-Projective Geometry Package
- //
- // testmulti.C
- //
- // $Header$
- //
- // William J.R. Longabaugh
- // University of Washington
- //
- // Test programs for the linear-affine-projective geometry
- // package described in William J.R. Longabaugh, "An Expanded
- // System for Coordinate-Free Geometric Programming", Master's
- // thesis, University of Washington, 1992.
- //
- // Copyright (c) 1992, William J.R. Longabaugh
- // Copying, use and development for non-commercial purposes permitted.
- // All rights for commercial use reserved.
- // This software is unsupported and without warranty; it is
- // provided "as is".
- //
- // ***********************************************************************
-
- #include "Lap.h"
- #include <math.h>
-
- extern void test1(void);
- extern void test2(void);
- extern void test3(void);
- extern void test4(void);
- extern void test5(void);
- extern void test6(void);
- extern void test7(void);
- extern void test8(void);
- extern void test9(void);
- extern void test10(void);
- extern void test11(void);
- extern void truth(Boolean res, Boolean expect);
- extern void beauty(void);
-
- static int count = 0;
-
- // ***********************************************************************
-
- void truth(Boolean res, Boolean expect)
- {
- if (res != expect) {
- cout << "Failure at: " << count << "\n";
- }
- count++;
- }
-
- // ***********************************************************************
-
- void beauty(void)
- {
- cout << "Now at: " << count << "\n";
- }
-
- // ***********************************************************************
-
- int main(void)
- {
- test1();
- test2();
- test3();
- test4();
- test5();
- test6();
- test7();
- test8();
- test9();
- test10();
- test11();
- return (0);
- }
-
- // ***********************************************************************
- // Quadratic surface:
-
- void test1(void)
- {
- cout << "ENTERING TEST1\n";
- beauty();
- ASpace param("paramspace", 2, TRUE);
- Simplex smp1 = param.StdSimplex();
-
- APoint s1(smp1, ScalarList(0.4, 0.3, 0.3));
- APoint s2(smp1, ScalarList(1.5, 2.0, -2.5));
- APoint s3(smp1, ScalarList(0.9, -0.3, 0.4));
-
- Simplex mysimp("my simplex", param, GeObList(s1, s2, s3));
-
- ASpace rng("rngspace", 3, TRUE);
- Frame fr2 = rng.StdBasis();
-
- ASpace domsp("testdom", SpaceList(param, 2), FALSE);
-
- IntList hold(1);
- hold[0] = 2;
-
- APoint aa(fr2, ScalarList(0.0, 0.0, 0.0, 1.0));
- APoint ab(fr2, ScalarList(1.0, 0.0, 0.3, 1.0));
- APoint bb(fr2, ScalarList(2.0, 0.0, 0.0, 1.0));
- APoint ac(fr2, ScalarList(0.5, 1.0, 0.3, 1.0));
- APoint bc(fr2, ScalarList(1.5, 1.0, 0.3, 1.0));
- APoint cc(fr2, ScalarList(1.0, 2.0, 0.0, 1.0));
-
- GeObList net = GeObList(aa, ab, bb) + GeObList(ac, bc, cc);
- MAM tstmp(domsp, hold, BasisList(mysimp), rng, net);
-
- APoint pt1(mysimp, ScalarList(1.0, 0.0, 0.0));
- APoint pt2(mysimp, ScalarList(0.0, 1.0, 0.0));
- APoint pt3(mysimp, ScalarList(0.0, 0.0, 1.0));
-
- APoint argpt1(domsp, pt1, pt1);
- APoint argpt2(domsp, pt1, pt2);
- APoint argpt3(domsp, pt2, pt2);
- APoint argpt4(domsp, pt1, pt3);
- APoint argpt5(domsp, pt2, pt3);
- APoint argpt6(domsp, pt3, pt3);
-
- APoint xout;
- xout = tstmp(argpt1);
- truth((xout - aa).IsZeroVector(), TRUE);
- xout = tstmp(argpt2);
- truth((xout - ab).IsZeroVector(), TRUE);
- xout = tstmp(argpt3);
- truth((xout - bb).IsZeroVector(), TRUE);
- xout = tstmp(argpt4);
- truth((xout - ac).IsZeroVector(), TRUE);
- xout = tstmp(argpt5);
- truth((xout - bc).IsZeroVector(), TRUE);
- xout = tstmp(argpt6);
- truth((xout - cc).IsZeroVector(), TRUE);
-
- // Test partial evaluation
-
- GeObList part = GeObList(pt1, NullGeOb);
-
- MAM mout = tstmp(part);
- truth(mout.FullyEvaluated(), FALSE);
- truth(mout.DomainSpace() == param, TRUE);
- truth(mout.RangeSpace() == rng, TRUE);
-
- mout = tstmp(param, part);
- truth(mout.FullyEvaluated(), FALSE);
- truth(mout.DomainSpace() == param, TRUE);
- truth(mout.RangeSpace() == rng, TRUE);
-
- xout = mout(pt2);
- truth((xout - ab).IsZeroVector(), TRUE);
- AVector tout = mout(GeObList(pt1 - pt2));
- truth((tout - (aa - ab)).IsZeroVector(), TRUE);
-
- // Test range space changes and acceptance of tangent vectors
-
- VSpace tan = domsp.GetSpace(TANGENT);
- VSpace rtan = rng.GetSpace(TANGENT);
- AVector argvec1(tan, pt1 - pt2, pt1 - pt2);
- GeOb gout1 = tstmp(argvec1);
- truth(gout1.Holds() == AFF_VECTOR, TRUE);
-
- mout = tstmp(GeObList((pt1 - pt2), NullGeOb));
- truth(mout.FullyEvaluated(), FALSE);
- truth(mout.DomainSpace() == param, TRUE);
- truth(mout.RangeSpace() == rtan, TRUE);
-
- GeOb gout2 = mout(GeObList(pt1 - pt2));
- truth((gout2 - gout1).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Test a cubic by quartic tensor product surface
- //
-
- void test2(void)
- {
- cout << "ENTERING TEST2\n";
- beauty();
-
- ASpace paramab("paramab", 1, TRUE);
- Simplex smp1 = paramab.StdSimplex();
-
- ASpace paramcd("paramcd", 1, TRUE);
- Simplex smp2 = paramcd.StdSimplex();
-
- ASpace rng("rngspace", 3, TRUE);
- Frame fr2 = rng.StdBasis();
-
- ASpace domsp("domsp",
- SpaceList(paramab, paramab, paramab) + SpaceList(paramcd, paramcd), FALSE);
-
- APoint sab1(smp1, ScalarList(0.3, 0.7));
- APoint sab2(smp1, ScalarList(1.3, -0.3));
-
- Simplex mysmpab("my simplexab", paramab, GeObList(sab1, sab2));
-
- APoint scd1(smp2, ScalarList(0.2, 0.8));
- APoint scd2(smp2, ScalarList(2.4, -1.4));
-
- Simplex mysmpcd("my simplexcd", paramcd, GeObList(scd1, scd2));
-
- IntList hold(2);
- hold[0] = 3;
- hold[1] = 2;
-
- APoint aaa_cc(fr2, ScalarList(0.0, 0.0, 0.0, 1.0));
- APoint aab_cc(fr2, ScalarList(1.0, 0.0, 0.3, 1.0));
- APoint abb_cc(fr2, ScalarList(2.0, 0.0, 0.2, 1.0));
- APoint bbb_cc(fr2, ScalarList(3.0, 0.0, 0.0, 1.0));
-
- APoint aaa_cd(fr2, ScalarList(0.0, 1.0, 0.0, 1.0));
- APoint aab_cd(fr2, ScalarList(1.0, 1.0, 0.8, 1.0));
- APoint abb_cd(fr2, ScalarList(2.0, 1.0, 0.7, 1.0));
- APoint bbb_cd(fr2, ScalarList(3.0, 1.0, 0.0, 1.0));
-
- APoint aaa_dd(fr2, ScalarList(0.0, 2.0, 0.0, 1.0));
- APoint aab_dd(fr2, ScalarList(1.0, 2.0, 0.6, 1.0));
- APoint abb_dd(fr2, ScalarList(2.0, 2.0, 0.5, 1.0));
- APoint bbb_dd(fr2, ScalarList(3.0, 2.0, 0.0, 1.0));
-
- GeObList net = GeObList(aaa_cc, aaa_cd, aaa_dd) +
- GeObList(aab_cc, aab_cd, aab_dd) +
- GeObList(abb_cc, abb_cd, abb_dd) +
- GeObList(bbb_cc, bbb_cd, bbb_dd);
-
- MAM tstmp;
- tstmp = MAM(domsp, hold, BasisList(mysmpab, mysmpcd), rng, net);
-
- APoint a(mysmpab, ScalarList(1.0, 0.0));
- APoint b(mysmpab, ScalarList(0.0, 1.0));
- APoint c(mysmpcd, ScalarList(1.0, 0.0));
- APoint d(mysmpcd, ScalarList(0.0, 1.0));
-
- APoint pt1(domsp, GeObList(a, a, a) + GeObList(c, c));
- APoint pt2(domsp, GeObList(a, a, b) + GeObList(c, c));
- APoint pt3(domsp, GeObList(a, b, b) + GeObList(c, c));
- APoint pt4(domsp, GeObList(b, b, b) + GeObList(c, c));
- APoint pt5(domsp, GeObList(a, a, a) + GeObList(c, d));
- APoint pt6(domsp, GeObList(a, a, b) + GeObList(c, d));
- APoint pt7(domsp, GeObList(a, b, b) + GeObList(c, d));
- APoint pt8(domsp, GeObList(b, b, b) + GeObList(c, d));
- APoint pt9(domsp, GeObList(a, a, a) + GeObList(d, d));
- APoint pt10(domsp, GeObList(a, a, b) + GeObList(d, d));
- APoint pt11(domsp, GeObList(a, b, b) + GeObList(d, d));
- APoint pt12(domsp, GeObList(b, b, b) + GeObList(d, d));
-
- APoint xout;
- xout = tstmp(pt1);
- truth((xout - aaa_cc).IsZeroVector(), TRUE);
- xout = tstmp(pt2);
- truth((xout - aab_cc).IsZeroVector(), TRUE);
- xout = tstmp(pt3);
- truth((xout - abb_cc).IsZeroVector(), TRUE);
- xout = tstmp(pt4);
- truth((xout - bbb_cc).IsZeroVector(), TRUE);
- xout = tstmp(pt5);
- truth((xout - aaa_cd).IsZeroVector(), TRUE);
- xout = tstmp(pt6);
- truth((xout - aab_cd).IsZeroVector(), TRUE);
- xout = tstmp(pt7);
- truth((xout - abb_cd).IsZeroVector(), TRUE);
- xout = tstmp(pt8);
- truth((xout - bbb_cd).IsZeroVector(), TRUE);
- xout = tstmp(pt9);
- truth((xout - aaa_dd).IsZeroVector(), TRUE);
- xout = tstmp(pt10);
- truth((xout - aab_dd).IsZeroVector(), TRUE);
- xout = tstmp(pt11);
- truth((xout - abb_dd).IsZeroVector(), TRUE);
- xout = tstmp(pt12);
- truth((xout - bbb_dd).IsZeroVector(), TRUE);
-
- // Test partial evaluation
-
- GeObList part = GeObList(a, NullGeOb, a) + GeObList(d, NullGeOb);
- ASpace inter("inter", SpaceList(paramab, paramcd), FALSE);
-
- MAM mout = tstmp(inter, part);
- truth(mout.FullyEvaluated(), FALSE);
- truth(mout.DomainSpace() == inter, TRUE);
- truth(mout.RangeSpace() == rng, TRUE);
-
- part = GeObList(a, d);
- xout = mout(part);
- truth((xout - aaa_dd).IsZeroVector(), TRUE);
-
- part = GeObList(a, d - c);
- AVector tout = mout(part);
- truth((tout - (aaa_dd - aaa_cd)).IsZeroVector(), TRUE);
-
- // Test range space changes and acceptance of tangent vectors
-
- VSpace tan = domsp.GetSpace(TANGENT);
- VSpace rtan = rng.GetSpace(TANGENT);
- AVector argvec1(tan, GeObList(a - b, a - b, a - b) +
- GeObList(d - c, d - c));
- GeOb tout1 = tstmp(argvec1);
- truth(tout1.Holds() == AFF_VECTOR, TRUE);
-
- }
-
- // ***********************************************************************
- // Test from 1 x 1 x 1 -> 3
-
- void test3(void)
- {
- cout << "ENTERING TEST3\n";
- beauty();
- ASpace paramab("paramab", 1, TRUE);
- Simplex smp1 = paramab.StdSimplex();
-
- ASpace paramcd("paramcd", 1, TRUE);
- Simplex smp2 = paramcd.StdSimplex();
-
- ASpace paramef("paramef", 1, TRUE);
- Simplex smp3 = paramef.StdSimplex();
-
- ASpace rng("rngspace", 3, TRUE);
- Frame fr2 = rng.StdBasis();
-
- ASpace domsp("domsp", SpaceList(paramab, paramab, paramcd, paramcd) +
- SpaceList(paramef, paramef), FALSE);
-
- APoint sab1(smp1, ScalarList(0.3, 0.7));
- APoint sab2(smp1, ScalarList(1.3, -0.3));
-
- Simplex mysmpab("my simplexab", paramab, GeObList(sab1, sab2));
-
- APoint scd1(smp2, ScalarList(0.2, 0.8));
- APoint scd2(smp2, ScalarList(2.4, -1.4));
-
- Simplex mysmpcd("my simplexcd", paramcd, GeObList(scd1, scd2));
-
- APoint sef1(smp3, ScalarList(0.1, 0.9));
- APoint sef2(smp3, ScalarList(1.2, -0.2));
-
- Simplex mysmpef("my simplexef", paramef, GeObList(sef1, sef2));
-
- IntList hold(2, 2, 2);
-
- APoint aa_cc_ee(fr2, ScalarList(0.0, 0.0, 0.0, 1.0));
- APoint ab_cc_ee(fr2, ScalarList(1.0, 0.0, 0.3, 1.0));
- APoint bb_cc_ee(fr2, ScalarList(2.0, 0.0, 0.0, 1.0));
- APoint aa_cd_ee(fr2, ScalarList(0.0, 1.0, 0.3, 1.0));
- APoint ab_cd_ee(fr2, ScalarList(1.0, 1.0, 0.6, 1.0));
- APoint bb_cd_ee(fr2, ScalarList(2.0, 1.0, 0.3, 1.0));
- APoint aa_dd_ee(fr2, ScalarList(0.0, 2.0, 0.0, 1.0));
- APoint ab_dd_ee(fr2, ScalarList(1.0, 2.0, 0.3, 1.0));
- APoint bb_dd_ee(fr2, ScalarList(2.0, 2.0, 0.0, 1.0));
-
- APoint aa_cc_ef(fr2, ScalarList(0.0, 0.0, 1.0, 1.0));
- APoint ab_cc_ef(fr2, ScalarList(1.0, 0.0, 1.3, 1.0));
- APoint bb_cc_ef(fr2, ScalarList(2.0, 0.0, 1.0, 1.0));
- APoint aa_cd_ef(fr2, ScalarList(0.0, 1.0, 1.3, 1.0));
- APoint ab_cd_ef(fr2, ScalarList(1.0, 1.0, 1.6, 1.0));
- APoint bb_cd_ef(fr2, ScalarList(2.0, 1.0, 1.3, 1.0));
- APoint aa_dd_ef(fr2, ScalarList(0.0, 2.0, 1.0, 1.0));
- APoint ab_dd_ef(fr2, ScalarList(1.0, 2.0, 1.3, 1.0));
- APoint bb_dd_ef(fr2, ScalarList(2.0, 2.0, 1.0, 1.0));
-
- APoint aa_cc_ff(fr2, ScalarList(0.0, 0.0, 2.0, 1.0));
- APoint ab_cc_ff(fr2, ScalarList(1.0, 0.0, 2.3, 1.0));
- APoint bb_cc_ff(fr2, ScalarList(2.0, 0.0, 2.0, 1.0));
- APoint aa_cd_ff(fr2, ScalarList(0.0, 1.0, 2.3, 1.0));
- APoint ab_cd_ff(fr2, ScalarList(1.0, 1.0, 2.6, 1.0));
- APoint bb_cd_ff(fr2, ScalarList(2.0, 1.0, 2.3, 1.0));
- APoint aa_dd_ff(fr2, ScalarList(0.0, 2.0, 2.0, 1.0));
- APoint ab_dd_ff(fr2, ScalarList(1.0, 2.0, 2.3, 1.0));
- APoint bb_dd_ff(fr2, ScalarList(2.0, 2.0, 2.0, 1.0));
-
- GeObList net = GeObList(aa_cc_ee, aa_cc_ef, aa_cc_ff) +
- GeObList(aa_cd_ee, aa_cd_ef, aa_cd_ff) +
- GeObList(aa_dd_ee, aa_dd_ef, aa_dd_ff) +
- GeObList(ab_cc_ee, ab_cc_ef, ab_cc_ff) +
- GeObList(ab_cd_ee, ab_cd_ef, ab_cd_ff) +
- GeObList(ab_dd_ee, ab_dd_ef, ab_dd_ff) +
- GeObList(bb_cc_ee, bb_cc_ef, bb_cc_ff) +
- GeObList(bb_cd_ee, bb_cd_ef, bb_cd_ff) +
- GeObList(bb_dd_ee, bb_dd_ef, bb_dd_ff);
-
- MAM tstmp;
- tstmp = MAM(domsp, hold, BasisList(mysmpab, mysmpcd, mysmpef), rng, net);
-
- APoint a(mysmpab, ScalarList(1.0, 0.0));
- APoint b(mysmpab, ScalarList(0.0, 1.0));
- APoint c(mysmpcd, ScalarList(1.0, 0.0));
- APoint d(mysmpcd, ScalarList(0.0, 1.0));
- APoint e(mysmpef, ScalarList(1.0, 0.0));
- APoint f(mysmpef, ScalarList(0.0, 1.0));
-
- APoint pt1(domsp, GeObList(a, a) + GeObList(c, c) + GeObList(e, e));
- APoint pt2(domsp, GeObList(a, b) + GeObList(c, c) + GeObList(e, e));
- APoint pt3(domsp, GeObList(b, b) + GeObList(c, c) + GeObList(e, e));
- APoint pt4(domsp, GeObList(a, a) + GeObList(c, d) + GeObList(e, e));
- APoint pt5(domsp, GeObList(a, b) + GeObList(c, d) + GeObList(e, e));
- APoint pt6(domsp, GeObList(b, b) + GeObList(c, d) + GeObList(e, e));
- APoint pt7(domsp, GeObList(a, a) + GeObList(d, d) + GeObList(e, e));
- APoint pt8(domsp, GeObList(a, b) + GeObList(d, d) + GeObList(e, e));
- APoint pt9(domsp, GeObList(b, b) + GeObList(d, d) + GeObList(e, e));
- APoint pt10(domsp, GeObList(a, a) + GeObList(c, c) + GeObList(e, f));
- APoint pt11(domsp, GeObList(a, b) + GeObList(c, c) + GeObList(e, f));
- APoint pt12(domsp, GeObList(b, b) + GeObList(c, c) + GeObList(e, f));
- APoint pt13(domsp, GeObList(a, a) + GeObList(c, d) + GeObList(e, f));
- APoint pt14(domsp, GeObList(a, b) + GeObList(c, d) + GeObList(e, f));
- APoint pt15(domsp, GeObList(b, b) + GeObList(c, d) + GeObList(e, f));
- APoint pt16(domsp, GeObList(a, a) + GeObList(d, d) + GeObList(e, f));
- APoint pt17(domsp, GeObList(a, b) + GeObList(d, d) + GeObList(e, f));
- APoint pt18(domsp, GeObList(b, b) + GeObList(d, d) + GeObList(e, f));
- APoint pt19(domsp, GeObList(a, a) + GeObList(c, c) + GeObList(f, f));
- APoint pt20(domsp, GeObList(a, b) + GeObList(c, c) + GeObList(f, f));
- APoint pt21(domsp, GeObList(b, b) + GeObList(c, c) + GeObList(f, f));
- APoint pt22(domsp, GeObList(a, a) + GeObList(c, d) + GeObList(f, f));
- APoint pt23(domsp, GeObList(a, b) + GeObList(c, d) + GeObList(f, f));
- APoint pt24(domsp, GeObList(b, b) + GeObList(c, d) + GeObList(f, f));
- APoint pt25(domsp, GeObList(a, a) + GeObList(d, d) + GeObList(f, f));
- APoint pt26(domsp, GeObList(a, b) + GeObList(d, d) + GeObList(f, f));
- APoint pt27(domsp, GeObList(b, b) + GeObList(d, d) + GeObList(f, f));
-
- APoint xout;
- xout = tstmp(pt1);
- truth((xout - aa_cc_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt2);
- truth((xout - ab_cc_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt3);
- truth((xout - bb_cc_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt4);
- truth((xout - aa_cd_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt5);
- truth((xout - ab_cd_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt6);
- truth((xout - bb_cd_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt7);
- truth((xout - aa_dd_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt8);
- truth((xout - ab_dd_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt9);
- truth((xout - bb_dd_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt10);
- truth((xout - aa_cc_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt11);
- truth((xout - ab_cc_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt12);
- truth((xout - bb_cc_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt13);
- truth((xout - aa_cd_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt14);
- truth((xout - ab_cd_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt15);
- truth((xout - bb_cd_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt16);
- truth((xout - aa_dd_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt17);
- truth((xout - ab_dd_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt18);
- truth((xout - bb_dd_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt19);
- truth((xout - aa_cc_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt20);
- truth((xout - ab_cc_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt21);
- truth((xout - bb_cc_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt22);
- truth((xout - aa_cd_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt23);
- truth((xout - ab_cd_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt24);
- truth((xout - bb_cd_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt25);
- truth((xout - aa_dd_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt26);
- truth((xout - ab_dd_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt27);
- truth((xout - bb_dd_ff).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Test from 1 x 2 -> 3
-
- void test4(void)
- {
- cout << "ENTERING TEST4\n";
- beauty();
- ASpace paramef("paramef", 1, TRUE);
- Simplex smp1 = paramef.StdSimplex();
-
- ASpace param2("param2", 2, TRUE);
- Simplex smp2 = param2.StdSimplex();
-
- APoint sef1(smp1, ScalarList(0.3, 0.7));
- APoint sef2(smp1, ScalarList(1.3, -0.3));
-
- Simplex mysmpef("my simplexab", paramef, GeObList(sef1, sef2));
-
- APoint s1(smp2, ScalarList(0.4, 0.3, 0.3));
- APoint s2(smp2, ScalarList(1.5, 2.0, -2.5));
- APoint s3(smp2, ScalarList(0.9, -0.3, 0.4));
-
- Simplex mysimp("my simplex2", param2, GeObList(s1, s2, s3));
-
- ASpace rng("rngspace", 3, TRUE);
- Frame fr2 = rng.StdBasis();
-
- ASpace domsp("domsp", SpaceList(param2, param2, paramef, paramef), FALSE);
-
- IntList hold(2);
- hold[0] = 2;
- hold[1] = 2;
-
- APoint aa_ee(fr2, ScalarList(0.0, 0.0, 0.0, 1.0));
- APoint ab_ee(fr2, ScalarList(1.0, 0.0, 0.3, 1.0));
- APoint bb_ee(fr2, ScalarList(2.0, 0.0, 0.0, 1.0));
- APoint ac_ee(fr2, ScalarList(0.5, 1.0, 0.3, 1.0));
- APoint bc_ee(fr2, ScalarList(1.5, 1.0, 0.3, 1.0));
- APoint cc_ee(fr2, ScalarList(1.0, 2.0, 0.0, 1.0));
-
- APoint aa_ef(fr2, ScalarList(0.0, 0.0, 1.0, 1.0));
- APoint ab_ef(fr2, ScalarList(1.0, 0.0, 1.3, 1.0));
- APoint bb_ef(fr2, ScalarList(2.0, 0.0, 1.0, 1.0));
- APoint ac_ef(fr2, ScalarList(0.5, 1.0, 1.3, 1.0));
- APoint bc_ef(fr2, ScalarList(1.5, 1.0, 1.3, 1.0));
- APoint cc_ef(fr2, ScalarList(1.0, 2.0, 1.0, 1.0));
-
- APoint aa_ff(fr2, ScalarList(0.0, 0.0, 2.0, 1.0));
- APoint ab_ff(fr2, ScalarList(1.0, 0.0, 2.3, 1.0));
- APoint bb_ff(fr2, ScalarList(2.0, 0.0, 2.0, 1.0));
- APoint ac_ff(fr2, ScalarList(0.5, 1.0, 2.3, 1.0));
- APoint bc_ff(fr2, ScalarList(1.5, 1.0, 2.3, 1.0));
- APoint cc_ff(fr2, ScalarList(1.0, 2.0, 2.0, 1.0));
-
- GeObList net = GeObList(aa_ee, aa_ef, aa_ff) +
- GeObList(ab_ee, ab_ef, ab_ff) +
- GeObList(bb_ee, bb_ef, bb_ff) +
- GeObList(ac_ee, ac_ef, ac_ff) +
- GeObList(bc_ee, bc_ef, bc_ff) +
- GeObList(cc_ee, cc_ef, cc_ff);
-
- MAM tstmp;
- tstmp = MAM(domsp, hold, BasisList(mysimp, mysmpef), rng, net);
-
- APoint a(mysimp, ScalarList(1.0, 0.0, 0.0));
- APoint b(mysimp, ScalarList(0.0, 1.0, 0.0));
- APoint c(mysimp, ScalarList(0.0, 0.0, 1.0));
-
- APoint e(mysmpef, ScalarList(1.0, 0.0));
- APoint f(mysmpef, ScalarList(0.0, 1.0));
-
- APoint pt1(domsp, GeObList(a, a, e, e));
- APoint pt2(domsp, GeObList(a, b, e, e));
- APoint pt3(domsp, GeObList(b, b, e, e));
- APoint pt4(domsp, GeObList(a, c, e, e));
- APoint pt5(domsp, GeObList(b, c, e, e));
- APoint pt6(domsp, GeObList(c, c, e, e));
- APoint pt7(domsp, GeObList(a, a, e, f));
- APoint pt8(domsp, GeObList(a, b, e, f));
- APoint pt9(domsp, GeObList(b, b, e, f));
- APoint pt10(domsp, GeObList(a, c, e, f));
- APoint pt11(domsp, GeObList(b, c, e, f));
- APoint pt12(domsp, GeObList(c, c, e, f));
- APoint pt13(domsp, GeObList(a, a, f, f));
- APoint pt14(domsp, GeObList(a, b, f, f));
- APoint pt15(domsp, GeObList(b, b, f, f));
- APoint pt16(domsp, GeObList(a, c, f, f));
- APoint pt17(domsp, GeObList(b, c, f, f));
- APoint pt18(domsp, GeObList(c, c, f, f));
-
- APoint xout;
- xout = tstmp(pt1);
- truth((xout - aa_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt2);
- truth((xout - ab_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt3);
- truth((xout - bb_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt4);
- truth((xout - ac_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt5);
- truth((xout - bc_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt6);
- truth((xout - cc_ee).IsZeroVector(), TRUE);
- xout = tstmp(pt7);
- truth((xout - aa_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt8);
- truth((xout - ab_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt9);
- truth((xout - bb_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt10);
- truth((xout - ac_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt11);
- truth((xout - bc_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt12);
- truth((xout - cc_ef).IsZeroVector(), TRUE);
- xout = tstmp(pt13);
- truth((xout - aa_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt14);
- truth((xout - ab_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt15);
- truth((xout - bb_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt16);
- truth((xout - ac_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt17);
- truth((xout - bc_ff).IsZeroVector(), TRUE);
- xout = tstmp(pt18);
- truth((xout - cc_ff).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Test from 3 -> 3
-
- void test5(void)
- {
- cout << "ENTERING TEST5\n";
- beauty();
- ASpace param("paramspace", 3, TRUE);
- Simplex smp1 = param.StdSimplex();
-
- APoint s1(smp1, ScalarList(0.2, 0.3, 0.3, 0.2));
- APoint s2(smp1, ScalarList(1.0, 2.0, -2.5, 0.5));
- APoint s3(smp1, ScalarList(0.6, -0.3, 0.4, 0.3));
- APoint s4(smp1, ScalarList(1.7, -0.9, 0.1, 0.1));
-
- Simplex mysimp("my simplex", param, GeObList(s1, s2, s3, s4));
-
- ASpace rng("rngspace", 3, TRUE);
- Frame fr2 = rng.StdBasis();
-
- ASpace domsp("testdom", SpaceList(param, 2), FALSE);
-
- IntList hold(1);
- hold[0] = 2;
-
- APoint aa(fr2, ScalarList(0.0, 0.0, 0.0, 1.0));
- APoint ab(fr2, ScalarList(1.0, 0.0, 0.0, 1.0));
- APoint bb(fr2, ScalarList(2.0, 0.0, 0.0, 1.0));
- APoint ac(fr2, ScalarList(0.5, 1.0, 0.0, 1.0));
- APoint bc(fr2, ScalarList(1.5, 1.0, 0.0, 1.0));
- APoint cc(fr2, ScalarList(1.0, 2.0, 0.0, 1.0));
- APoint da(fr2, ScalarList(0.5, 0.5, 1.0, 1.0));
- APoint db(fr2, ScalarList(1.5, 0.5, 1.0, 1.0));
- APoint dc(fr2, ScalarList(2.5, 0.5, 1.0, 1.0));
- APoint dd(fr2, ScalarList(1.0, 1.0, 2.0, 1.0));
-
- GeObList net = GeObList(aa, ab, bb) +
- GeObList(ac, bc, cc) +
- GeObList(da, db, dc, dd);
-
- MAM tstmp(domsp, hold, BasisList(mysimp), rng, net);
-
- APoint pt1(mysimp, ScalarList(1.0, 0.0, 0.0, 0.0));
- APoint pt2(mysimp, ScalarList(0.0, 1.0, 0.0, 0.0));
- APoint pt3(mysimp, ScalarList(0.0, 0.0, 1.0, 0.0));
- APoint pt4(mysimp, ScalarList(0.0, 0.0, 0.0, 1.0));
-
- APoint apt1(domsp, pt1, pt1);
- APoint apt2(domsp, pt1, pt2);
- APoint apt3(domsp, pt2, pt2);
- APoint apt4(domsp, pt1, pt3);
- APoint apt5(domsp, pt2, pt3);
- APoint apt6(domsp, pt3, pt3);
- APoint apt7(domsp, pt4, pt1);
- APoint apt8(domsp, pt4, pt2);
- APoint apt9(domsp, pt4, pt3);
- APoint apt10(domsp, pt4, pt4);
-
- APoint xout;
- xout = tstmp(apt1);
- truth((xout - aa).IsZeroVector(), TRUE);
- xout = tstmp(apt2);
- truth((xout - ab).IsZeroVector(), TRUE);
- xout = tstmp(apt3);
- truth((xout - bb).IsZeroVector(), TRUE);
- xout = tstmp(apt4);
- truth((xout - ac).IsZeroVector(), TRUE);
- xout = tstmp(apt5);
- truth((xout - bc).IsZeroVector(), TRUE);
- xout = tstmp(apt6);
- truth((xout - cc).IsZeroVector(), TRUE);
- xout = tstmp(apt7);
- truth((xout - da).IsZeroVector(), TRUE);
- xout = tstmp(apt8);
- truth((xout - db).IsZeroVector(), TRUE);
- xout = tstmp(apt9);
- truth((xout - dc).IsZeroVector(), TRUE);
- xout = tstmp(apt10);
- truth((xout - dd).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // General linear map
-
- void test6(void)
- {
- cout << "ENTERING TEST6\n";
- beauty();
- VSpace param("param", 2, TRUE);
- VBasis vba1 = param.StdBasis();
-
- VSpace rng("rngspace", 3, TRUE);
- VBasis vba2 = rng.StdBasis();
-
- VSpace domsp("domsp", SpaceList(param, param, param), FALSE);
-
- Vector b1(vba1, ScalarList(0.3, 1.4));
- Vector b2(vba1, ScalarList(2.1, 3.2));
-
- VBasis myvba("my basis", param, GeObList(b1, b2));
-
- IntList hold(1, 1, 1);
-
- Vector aaa(vba2, ScalarList(0.0, 0.0, 0.0));
- Vector aab(vba2, ScalarList(0.0, 2.0, 0.0));
- Vector aba(vba2, ScalarList(2.0, 0.0, 0.0));
- Vector abb(vba2, ScalarList(2.0, 2.0, 0.0));
- Vector baa(vba2, ScalarList(0.0, 0.0, 1.0));
- Vector bab(vba2, ScalarList(0.0, 1.0, 1.0));
- Vector bba(vba2, ScalarList(1.0, 0.0, 1.0));
- Vector bbb(vba2, ScalarList(1.0, 1.0, 1.0));
-
- GeObList net = GeObList(aaa, aab, aba, abb) + GeObList(baa, bab, bba, bbb);
-
- MLM tstmp;
- tstmp = MLM(domsp, hold, BasisList(myvba, myvba, myvba), rng, net);
-
- Vector a(myvba, ScalarList(1.0, 0.0));
- Vector b(myvba, ScalarList(0.0, 1.0));
-
- Vector v1(domsp, GeObList(a, a, a));
- Vector v2(domsp, GeObList(a, a, b));
- Vector v3(domsp, GeObList(a, b, a));
- Vector v4(domsp, GeObList(a, b, b));
- Vector v5(domsp, GeObList(b, a, a));
- Vector v6(domsp, GeObList(b, a, b));
- Vector v7(domsp, GeObList(b, b, a));
- Vector v8(domsp, GeObList(b, b, b));
-
- Vector xout;
- xout = tstmp(v1);
- truth((xout - aaa).IsZeroVector(), TRUE);
- xout = tstmp(v2);
- truth((xout - aab).IsZeroVector(), TRUE);
- xout = tstmp(v3);
- truth((xout - aba).IsZeroVector(), TRUE);
- xout = tstmp(v4);
- truth((xout - abb).IsZeroVector(), TRUE);
- xout = tstmp(v5);
- truth((xout - baa).IsZeroVector(), TRUE);
- xout = tstmp(v6);
- truth((xout - bab).IsZeroVector(), TRUE);
- xout = tstmp(v7);
- truth((xout - bba).IsZeroVector(), TRUE);
- xout = tstmp(v8);
- truth((xout - bbb).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Antisymmetric MLM:
-
- void test7(void)
- {
- // Define a MLM on a 4-d space that takes 3 arguments
-
- cout << "ENTERING TEST7\n";
- beauty();
-
- VSpace param("param", 4, TRUE);
- VBasis vba1 = param.StdBasis();
-
- VSpace rng("rngspace", 4, TRUE);
- VBasis vba2 = rng.StdBasis();
-
- VSpace domsp("domsp", SpaceList(param, param, param), FALSE);
-
- Vector b1(vba1, ScalarList(0.3, 1.4, 2.3, 4.5));
- Vector b2(vba1, ScalarList(2.1, 3.2, 1.1, 7.6));
- Vector b3(vba1, ScalarList(6.7, -3.4, -2.5, 9.7));
- Vector b4(vba1, ScalarList(-5.2, 8.5, 1.1, 3.4));
-
- VBasis myvba("my basis", param, GeObList(b1, b2, b3, b4));
-
- IntList hold(1);
- hold[0] = -3;
-
- Vector abc(vba2, ScalarList(1.0, 0.0, 0.0, 0.0));
- Vector abd(vba2, ScalarList(0.0, 2.0, 0.0, 2.0));
- Vector acd(vba2, ScalarList(2.0, 0.0, 2.0, 0.0));
- Vector bcd(vba2, ScalarList(2.0, 2.0, 0.0, 0.0));
-
- GeObList net = GeObList(abc, abd, acd, bcd);
-
- MLM tstmp;
- tstmp = MLM(domsp, hold, BasisList(myvba), rng, net);
-
- Vector a(myvba, ScalarList(1.0, 0.0, 0.0, 0.0));
- Vector b(myvba, ScalarList(0.0, 1.0, 0.0, 0.0));
- Vector c(myvba, ScalarList(0.0, 0.0, 1.0, 0.0));
- Vector d(myvba, ScalarList(0.0, 0.0, 0.0, 1.0));
-
- Vector v1(domsp, GeObList(a, b, c));
- Vector v2(domsp, GeObList(a, b, d));
- Vector v3(domsp, GeObList(a, c, d));
- Vector v4(domsp, GeObList(b, c, d));
-
- Vector v5(domsp, GeObList(b, a, c));
- Vector v6(domsp, GeObList(d, b, a));
- Vector v7(domsp, GeObList(a, d, c));
- Vector v8(domsp, GeObList(d, b, c));
-
- Vector xout;
- xout = tstmp(v1);
- truth((xout - abc).IsZeroVector(), TRUE);
- xout = tstmp(v2);
- truth((xout - abd).IsZeroVector(), TRUE);
- xout = tstmp(v3);
- truth((xout - acd).IsZeroVector(), TRUE);
- xout = tstmp(v4);
- truth((xout - bcd).IsZeroVector(), TRUE);
- xout = tstmp(v5);
- truth((xout + abc).IsZeroVector(), TRUE);
- xout = tstmp(v6);
- truth((xout + abd).IsZeroVector(), TRUE);
- xout = tstmp(v7);
- truth((xout + acd).IsZeroVector(), TRUE);
- xout = tstmp(v8);
- truth((xout - bcd).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Antisymmetric MLM:
-
- void test8(void)
- {
- // Define a MLM on a 4-d space that takes 2 arguments
-
- cout << "ENTERING TEST8\n";
- beauty();
-
- VSpace param("param", 4, TRUE);
- VBasis vba1 = param.StdBasis();
-
- VSpace rng("rngspace", 4, TRUE);
- VBasis vba2 = rng.StdBasis();
-
- VSpace domsp("domsp", SpaceList(param, param), FALSE);
-
- Vector b1(vba1, ScalarList(0.3, 1.4, 2.3, 4.5));
- Vector b2(vba1, ScalarList(2.1, 3.2, 1.1, 7.6));
- Vector b3(vba1, ScalarList(6.7, -3.4, -2.5, 9.7));
- Vector b4(vba1, ScalarList(-5.2, 8.5, 1.1, 3.4));
-
- VBasis myvba("my basis", param, GeObList(b1, b2, b3, b4));
-
- IntList hold(1);
- hold[0] = -2;
-
- Vector ab(vba2, ScalarList(1.0, 0.0, 0.0, 0.0));
- Vector ac(vba2, ScalarList(0.0, 2.0, 0.0, 5.0));
- Vector bc(vba2, ScalarList(2.0, 0.0, 7.0, 0.0));
- Vector ad(vba2, ScalarList(2.0, 3.0, 0.0, 0.0));
- Vector bd(vba2, ScalarList(5.0, 0.0, 1.0, 0.0));
- Vector cd(vba2, ScalarList(8.0, 2.0, 4.0, 3.0));
-
- GeObList net = GeObList(ab, ac, bc) + GeObList(ad, bd, cd);
-
- MLM tstmp;
- tstmp = MLM(domsp, hold, BasisList(myvba), rng, net);
-
- Vector a(myvba, ScalarList(1.0, 0.0, 0.0, 0.0));
- Vector b(myvba, ScalarList(0.0, 1.0, 0.0, 0.0));
- Vector c(myvba, ScalarList(0.0, 0.0, 1.0, 0.0));
- Vector d(myvba, ScalarList(0.0, 0.0, 0.0, 1.0));
-
- Vector v1(domsp, GeObList(a, b));
- Vector v2(domsp, GeObList(a, c));
- Vector v3(domsp, GeObList(b, c));
- Vector v4(domsp, GeObList(a, d));
- Vector v5(domsp, GeObList(b, d));
- Vector v6(domsp, GeObList(c, d));
-
- Vector v7(domsp, GeObList(b, a));
- Vector v8(domsp, GeObList(c, b));
- Vector v9(domsp, GeObList(d, b));
- Vector v10(domsp, GeObList(d, a));
-
- Vector xout;
- xout = tstmp(v1);
- truth((xout - ab).IsZeroVector(), TRUE);
- xout = tstmp(v2);
- truth((xout - ac).IsZeroVector(), TRUE);
- xout = tstmp(v3);
- truth((xout - bc).IsZeroVector(), TRUE);
- xout = tstmp(v4);
- truth((xout - ad).IsZeroVector(), TRUE);
- xout = tstmp(v5);
- truth((xout - bd).IsZeroVector(), TRUE);
- xout = tstmp(v6);
- truth((xout - cd).IsZeroVector(), TRUE);
- xout = tstmp(v7);
- truth((xout + ab).IsZeroVector(), TRUE);
- xout = tstmp(v8);
- truth((xout + bc).IsZeroVector(), TRUE);
- xout = tstmp(v9);
- truth((xout + bd).IsZeroVector(), TRUE);
- xout = tstmp(v10);
- truth((xout + ad).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Create Multimap from a geob
- // a vector -> map from dual to real -> mlm
-
- void test9(void)
- {
- cout << "ENTERING TEST9\n";
- beauty();
- VSpace v1("v1space", 4, TRUE);
- VBasis bas1 = v1.StdBasis();
-
- Vector foo(bas1, ScalarList(7.2, 3.4, 12.1, 6.7));
- Vector bar(bas1, ScalarList(12.3, 4.1, 3.6, 3.2));
- Vector bard = bar.Dual();
-
- MLM foomap(foo);
-
- Scalar res1 = foo.Apply(bard);
- Scalar res = foomap(bard).ToScalar();
- cout << "res1: " << res1 << "\n";
- cout << "res: " << res << "\n";
-
- MLM part = foomap(GeObList(bard));
- truth((part.RangeSpace() == Reals), TRUE);
- truth(part.FullyEvaluated(), TRUE);
- Scalar res2 = part.ToScalar();
- cout << "res2: " << res2 << "\n";
- }
-
- // ***********************************************************************
- // Create Multimap from a map
- //
- // affine -> vector
- // affine -> affine
- // vector -> vector
- //
-
- void test10(void)
- {
- cout << "ENTERING TEST10\n";
- beauty();
- VSpace vs1("vs1", 3, TRUE);
- VSpace vs2("vs2", 3, TRUE);
- ASpace as1("as1", 2, TRUE);
- ASpace as2("as2", 2, TRUE);
-
- // Create an affine map:
-
- Frame fra1 = as1.StdBasis();
- Frame fra2 = as2.StdBasis();
- APoint a1(fra1, ScalarList(3.6, -4.5, 1.0));
- APoint a2(fra1, ScalarList(2.2, 5.1, 1.0));
- APoint a3(fra1, ScalarList(-6.7, 2.3, 1.0));
- APoint a4(fra1, ScalarList(-1.4, -7.9, 1.0));
-
- Simplex s1("test simplex", as1, GeObList(a1, a2, a3));
- Simplex std = as2.StdSimplex();
- AffineMap am1(s1, std);
-
- MAM mam1(am1);
-
- GeOb xout;
- GeOb comp;
- xout = am1(a1);
- comp = mam1(a1);
- truth(comp.Holds() == AFF_POINT, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am1(a2);
- comp = mam1(a2);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am1(a3);
- comp = mam1(a3);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am1(a4);
- comp = mam1(a4);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am1(a4 - a3);
- comp = mam1(a4 - a3);
- truth(comp.Holds() == AFF_VECTOR, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
-
- // Create a linear map:
-
- VBasis bas1 = vs1.StdBasis();
- VBasis bas2 = vs2.StdBasis();
- Vector v1(bas1, ScalarList(3.6, 4.5, -2.3));
- Vector v2(bas1, ScalarList(2.2, -1.5, -1.4));
- Vector v3(bas1, ScalarList(-7.6, 2.3, 3.5));
- Vector v4(bas1, ScalarList(-1.4, -7.9, 8.9));
-
- VBasis b1("test basis", vs1, GeObList(v1, v2, v3));
- LinearMap lm1(b1, bas2);
-
- MLM mlm1(lm1);
-
- xout = lm1(v1);
- comp = mlm1(v1);
- truth(comp.Holds() == VECTOR, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = lm1(v2);
- comp = mlm1(v2);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = lm1(v3);
- comp = mlm1(v3);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = lm1(v4);
- comp = mlm1(v4);
- truth((xout - comp).IsZeroVector(), TRUE);
-
- // Create affine maps to vector space:
-
- VSubSet vsub1("2dvec", vs1, GeObList(v1, v2));
- AffineMap am2(s1, vsub1, GeObList(v1, v2, v1 + v2));
-
- ASubSet asub1("2daff", vs1, GeObList(v1, v2, v3));
- AffineMap am3(s1, asub1, GeObList(v1, v2, v3));
-
- MAM mam2(am2);
-
- xout = am2(a1);
- comp = mam2(a1);
- truth(comp.Holds() == VECTOR, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am2(a2);
- comp = mam2(a2);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am2(a3);
- comp = mam2(a3);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am2(a4);
- comp = mam2(a4);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am2(a4 - a3);
- comp = mam2(a4 - a3);
- truth(comp.Holds() == VECTOR, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
-
- MAM mam3(am3);
-
- xout = am3(a1);
- comp = mam3(a1);
- truth(comp.Holds() == VECTOR, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am3(a2);
- comp = mam3(a2);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am3(a3);
- comp = mam3(a3);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am3(a4);
- comp = mam3(a4);
- truth((xout - comp).IsZeroVector(), TRUE);
- xout = am3(a4 - a3);
- comp = mam3(a4 - a3);
- truth(comp.Holds() == VECTOR, TRUE);
- truth((xout - comp).IsZeroVector(), TRUE);
- }
-
- // ***********************************************************************
- // Test more range changes and partial evaluation
-
- void test11(void)
- {
- cout << "ENTERING TEST11\n";
- beauty();
- ASpace param("paramspace", 1, TRUE);
- Simplex smp1 = param.StdSimplex();
-
- APoint s1(smp1, ScalarList(0.2, 0.8));
- APoint s2(smp1, ScalarList(0.5, 0.5));
-
- Simplex mysimp("my simplex", param, GeObList(s1, s2));
-
- ASpace rng("rngspace", 2, TRUE);
- Frame fr2 = rng.StdBasis();
-
- ASpace domsp("testdom", SpaceList(param, 4), FALSE);
-
- IntList hold(1);
- hold[0] = 4;
-
- APoint aaaa(fr2, ScalarList(0.0, 0.0, 1.0));
- APoint aaab(fr2, ScalarList(1.0, 1.0, 1.0));
- APoint aabb(fr2, ScalarList(1.5, 1.5, 1.0));
- APoint abbb(fr2, ScalarList(2.0, 0.7, 1.0));
- APoint bbbb(fr2, ScalarList(2.5, 1.0, 1.0));
-
- GeObList net = GeObList(aaaa, aaab, aabb) + GeObList(abbb, bbbb);
-
- MAM tstmp(domsp, hold, BasisList(mysimp), rng, net);
-
- APoint pt1(mysimp, ScalarList(1.0, 0.0));
- APoint pt2(mysimp, ScalarList(0.0, 1.0));
-
- APoint apt1(domsp, GeObList(pt1, pt1, pt1, pt1));
- APoint apt2(domsp, GeObList(pt1, pt1, pt1, pt2));
- APoint apt3(domsp, GeObList(pt1, pt1, pt2, pt2));
- APoint apt4(domsp, GeObList(pt1, pt2, pt2, pt2));
- APoint apt5(domsp, GeObList(pt2, pt2, pt2, pt2));
-
- APoint xout;
- xout = tstmp(apt1);
- truth((xout - aaaa).IsZeroVector(), TRUE);
- xout = tstmp(apt2);
- truth((xout - aaab).IsZeroVector(), TRUE);
- xout = tstmp(apt3);
- truth((xout - aabb).IsZeroVector(), TRUE);
- xout = tstmp(apt4);
- truth((xout - abbb).IsZeroVector(), TRUE);
- xout = tstmp(apt5);
- truth((xout - bbbb).IsZeroVector(), TRUE);
-
- // Test partial evaluation
-
- GeObList part = GeObList(pt1, NullGeOb, NullGeOb, pt2 - pt1);
- ASpace inter("inter", SpaceList(param, 2), FALSE);
- VSpace newrng = rng.GetSpace(TANGENT);
-
- MAM mout = tstmp(inter, part);
- truth(mout.FullyEvaluated(), FALSE);
- truth(mout.DomainSpace() == inter, TRUE);
- truth(mout.RangeSpace() == newrng, TRUE);
-
- part = GeObList(pt1, pt1);
- AVector tout = mout(part);
- truth((tout - (aaab - aaaa)).IsZeroVector(), TRUE);
-
- // Map to a linear space:
-
- VSpace vrng("vrng", 3, TRUE);
- VBasis vb1 = vrng.StdBasis();
- Vector vaaaa(vb1, ScalarList(0.0, 0.0, 3.4));
- Vector vaaab(vb1, ScalarList(1.0, 1.0, 6.5));
- Vector vaabb(vb1, ScalarList(1.5, 1.5, 1.2));
- Vector vabbb(vb1, ScalarList(2.0, 0.7, 3.5));
- Vector vbbbb(vb1, ScalarList(2.5, 1.0, 1.9));
-
- GeObList vnet = GeObList(vaaaa, vaaab, vaabb) + GeObList(vabbb, vbbbb);
-
- MAM vtstmp(domsp, hold, BasisList(mysimp), vrng, vnet);
-
- // Test partial evaluation
-
- part = GeObList(pt1, NullGeOb, NullGeOb, pt2 - pt1);
-
- mout = vtstmp(inter, part);
- truth(mout.FullyEvaluated(), FALSE);
- truth(mout.DomainSpace() == inter, TRUE);
- truth(mout.RangeSpace() == vrng, TRUE);
-
- part = GeObList(pt1, pt1);
- GeOb gout = mout(part);
- truth((gout - (vaaab - vaaaa)).IsZeroVector(), TRUE);
- truth(gout.Holds() == VECTOR, TRUE);
- }
-